home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / MELL / NETLIB00 / !NetLib / h / resolv < prev   
Text File  |  1996-11-12  |  13KB  |  337 lines

  1. /*
  2.  * ++Copyright++ 1983, 1987, 1989, 1993
  3.  * -
  4.  * Copyright (c) 1983, 1987, 1989, 1993
  5.  *    The Regents of the University of California.  All rights reserved.
  6.  * 
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in the
  14.  *    documentation and/or other materials provided with the distribution.
  15.  * 3. All advertising materials mentioning features or use of this software
  16.  *    must display the following acknowledgement:
  17.  *     This product includes software developed by the University of
  18.  *     California, Berkeley and its contributors.
  19.  * 4. Neither the name of the University nor the names of its contributors
  20.  *    may be used to endorse or promote products derived from this software
  21.  *    without specific prior written permission.
  22.  * 
  23.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  24.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  27.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  29.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  30.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  31.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  32.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  33.  * SUCH DAMAGE.
  34.  * -
  35.  * Portions Copyright (c) 1993 by Digital Equipment Corporation.
  36.  * 
  37.  * Permission to use, copy, modify, and distribute this software for any
  38.  * purpose with or without fee is hereby granted, provided that the above
  39.  * copyright notice and this permission notice appear in all copies, and that
  40.  * the name of Digital Equipment Corporation not be used in advertising or
  41.  * publicity pertaining to distribution of the document or software without
  42.  * specific, written prior permission.
  43.  * 
  44.  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
  45.  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
  46.  * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
  47.  * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  48.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  49.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  50.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  51.  * SOFTWARE.
  52.  * -
  53.  * --Copyright--
  54.  */
  55.  
  56. /*
  57.  *    @(#)resolv.h    8.1 (Berkeley) 6/2/93
  58.  *    $Id: resolv.h,v 8.3 1995/06/29 09:26:10 vixie Exp $
  59.  */
  60.  
  61. #ifndef __netlib_resolv_h
  62. #define __netlib_resolv_h
  63.  
  64. /* Freenet programmers interface - resolv.h - edited by stewart 7/2/96 */
  65.  
  66. #include "sys/types.h"
  67. #include "netinet/in.h"
  68. #include <stdio.h>
  69.  
  70. /*
  71.  * revision information.  this is the release date in YYYYMMDD format.
  72.  * it can change every day so the right thing to do with it is use it
  73.  * in preprocessor commands such as "#if (__RES > 19931104)".  do not
  74.  * compare for equality; rather, use it to determine whether your resolver
  75.  * is new enough to contain a certain feature.
  76.  */
  77.  
  78. #define    __RES    19960801
  79.  
  80. /*
  81.  * Resolver configuration file.
  82.  * Normally not present, but may contain the address of the
  83.  * inital name server(s) to query and the domain search list.
  84.  */
  85.  
  86. #ifndef _PATH_RESCONF
  87. #define _PATH_RESCONF        "InetDBase:resconf"
  88. #endif
  89.  
  90. /*
  91.  * Global defines and variables for resolver stub.
  92.  */
  93. #define    MAXNS            3    /* max # name servers we'll track */
  94. #define    MAXDFLSRCH        3    /* # default domain levels to try */
  95. #define    MAXDNSRCH        6    /* max # domains in search path */
  96. #define    LOCALDOMAINPARTS    2    /* min levels in name that is "local" */
  97.  
  98. #define    RES_TIMEOUT        5    /* min. seconds between retries */
  99. #define    MAXRESOLVSORT        10    /* number of net to sort on */
  100. #define    RES_MAXNDOTS        15    /* should reflect bit field size */
  101.  
  102. struct __res_state {
  103.     int    retrans;         /* retransmition time interval */
  104.     int    retry;            /* number of times to retransmit */
  105.     u_long    options;        /* option flags - see below. */
  106.     int    nscount;        /* number of name servers */
  107.     struct sockaddr_in
  108.         nsaddr_list[MAXNS];    /* address of name server */
  109. #define    nsaddr    nsaddr_list[0]        /* for backward compatibility */
  110.     u_short    id;            /* current packet id */
  111.     char    *dnsrch[MAXDNSRCH+1];    /* components of domain to search */
  112.     char    defdname[MAXDNAME];    /* default domain */
  113.     u_long    pfcode;            /* RES_PRF_ flags - see below. */
  114.     unsigned ndots:4;        /* threshold for initial abs. query */
  115.     unsigned nsort:4;        /* number of elements in sort_list[] */
  116.     char    unused[3];
  117.     struct {
  118.         struct in_addr    addr;
  119.         u_int32_t    mask;
  120.     } sort_list[MAXRESOLVSORT];
  121.     char    pad[72];        /* On an i386 this means 512b total. */
  122. };
  123.  
  124. /*
  125.  * Resolver options (keep these in synch with res_debug.c, please)
  126.  */
  127. #define RES_INIT    0x00000001    /* address initialized */
  128. #define RES_DEBUG    0x00000002    /* print debug messages */
  129. #define RES_AAONLY    0x00000004    /* authoritative answers only (!IMPL)*/
  130. #define RES_USEVC    0x00000008    /* use virtual circuit */
  131. #define RES_PRIMARY    0x00000010    /* query primary server only (!IMPL) */
  132. #define RES_IGNTC    0x00000020    /* ignore trucation errors */
  133. #define RES_RECURSE    0x00000040    /* recursion desired */
  134. #define RES_DEFNAMES    0x00000080    /* use default domain name */
  135. #define RES_STAYOPEN    0x00000100    /* Keep TCP socket open */
  136. #define RES_DNSRCH    0x00000200    /* search up local domain tree */
  137. #define    RES_INSECURE1    0x00000400    /* type 1 security disabled */
  138. #define    RES_INSECURE2    0x00000800    /* type 2 security disabled */
  139. #define    RES_NOALIASES    0x00001000    /* shuts off HOSTALIASES feature */
  140. #define    RES_USE_INET6    0x00002000    /* use/map IPv6 in gethostbyname() */
  141.  
  142. #define RES_DEFAULT    (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
  143.  
  144. /*
  145.  * Resolver "pfcode" values.  Used by dig.
  146.  */
  147. #define RES_PRF_STATS    0x00000001
  148. /*            0x00000002    */
  149. #define RES_PRF_CLASS   0x00000004
  150. #define RES_PRF_CMD    0x00000008
  151. #define RES_PRF_QUES    0x00000010
  152. #define RES_PRF_ANS    0x00000020
  153. #define RES_PRF_AUTH    0x00000040
  154. #define RES_PRF_ADD    0x00000080
  155. #define RES_PRF_HEAD1    0x00000100
  156. #define RES_PRF_HEAD2    0x00000200
  157. #define RES_PRF_TTLID    0x00000400
  158. #define RES_PRF_HEADX    0x00000800
  159. #define RES_PRF_QUERY    0x00001000
  160. #define RES_PRF_REPLY    0x00002000
  161. #define RES_PRF_INIT    0x00004000
  162. /*            0x00008000    */
  163.  
  164. /* hooks are still experimental as of 4.9.2 */
  165. typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
  166.     res_sendhookact;
  167.  
  168. typedef res_sendhookact (*res_send_qhook)(struct sockaddr_in * const *ns,
  169.                           const u_char **query,
  170.                           int *querylen,
  171.                           u_char *ans,
  172.                           int anssiz,
  173.                           int *resplen);
  174.  
  175. typedef res_sendhookact (*res_send_rhook)(const struct sockaddr_in *ns,
  176.                           const u_char *query,
  177.                           int querylen,
  178.                           u_char *ans,
  179.                           int anssiz,
  180.                           int *resplen);
  181.  
  182.  
  183. struct res_sym {
  184.     int    number;        /* Identifying number, like T_MX */
  185.     char *    name;        /* Its symbolic name, like "MX" */
  186.     char *    humanname;    /* Its fun name, like "mail exchanger" */
  187. };
  188.  
  189. extern struct __res_state _res;
  190. extern const struct res_sym __p_class_syms[];
  191. extern const struct res_sym __p_type_syms[];
  192.  
  193. /* Private routines shared between libc/net, named, nslookup and others. */
  194. #define    res_hnok    __res_hnok
  195. #define    res_ownok    __res_ownok
  196. #define    res_mailok    __res_mailok
  197. #define    res_dnok    __res_dnok
  198. #define    sym_ston    __sym_ston
  199. #define    sym_ntos    __sym_ntos
  200. #define    sym_ntop    __sym_ntop
  201. #define b64_ntop    __b64_ntop
  202. #define    b64_pton    __b64_pton
  203. #define    loc_ntoa    __loc_ntoa
  204. #define    loc_aton    __loc_aton
  205. #define    dn_skipname    __dn_skipname
  206. #define    fp_resstat    __fp_resstat
  207. #define    fp_query    __fp_query
  208. #define    fp_nquery    __fp_nquery
  209. #define    hostalias    __hostalias
  210. #define    putlong        __putlong
  211. #define    putshort    __putshort
  212. #define p_class        __p_class
  213. #define p_time        __p_time
  214. #define p_type        __p_type
  215. #define    p_query        __p_query
  216. #define    p_cdnname    __p_cdnname
  217. #define    p_cdname    __p_cdname
  218. #define    p_fqnname    __p_fqnname
  219. #define    p_fqname    __p_fqname
  220. #define    p_rr        __p_rr
  221. #define    p_option    __p_option
  222. #define    p_secstodate    __p_secstodate
  223. #define    dn_count_labels    __dn_count_labels
  224. #define    dn_comp        __dn_comp
  225. #define    dn_expand    __dn_expand
  226. #define    res_init    __res_init
  227. #define    res_randomid    __res_randomid
  228. #define    res_query    __res_query
  229. #define    res_search    __res_search
  230. #define    res_querydomain    __res_querydomain
  231. #define    res_mkquery    __res_mkquery
  232. #define    res_send    __res_send
  233. #define    res_isourserver    __res_isourserver
  234. #define    res_nameinquery    __res_nameinquery
  235. #define    res_queriesmatch __res_queriesmatch
  236. #define    res_close    __res_close
  237.  
  238. #ifdef __cplusplus
  239. /* Since this code is going to externally linked, we MUST guarantee link
  240.  * success by ensuring that the compiler knows that it was compiled as C
  241.  * code with the extern C, and provide full ANSI prototypes despite the
  242.  * source code being K&R style
  243.  */
  244. extern "C" {
  245. #endif
  246.  
  247. /*
  248.  * Skip over a compressed domain name. Return the size or -1.
  249.  */
  250. extern int __dn_skipname (const u_char * /*comp_dn*/, const u_char * /*eom*/);
  251.  
  252. /*
  253.  * Compress domain name 'exp_dn' into 'comp_dn'.
  254.  * Return the size of the compressed name or -1.
  255.  * 'length' is the size of the array pointed to by 'comp_dn'.
  256.  * 'dnptrs' is a list of pointers to previous compressed names. dnptrs[0]
  257.  * is a pointer to the beginning of the message. The list ends with NULL.
  258.  * 'lastdnptr' is a pointer to the end of the arrary pointed to
  259.  * by 'dnptrs'. Side effect is to update the list of pointers for
  260.  * labels inserted into the message as we compress the name.
  261.  * If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
  262.  * is NULL, we don't update the list.
  263.  */
  264. extern int dn_comp (const char * /*exp_dn*/, u_char * /*comp_dn*/, int /*length*/,
  265.     u_char ** /*dnptrs*/, u_char ** /*lastdnptr*/);
  266.  
  267. /*
  268.  * Expand compressed domain name 'comp_dn' to full domain name.
  269.  * 'msg' is a pointer to the begining of the message,
  270.  * 'eomorig' points to the first location after the message,
  271.  * 'exp_dn' is a pointer to a buffer of size 'length' for the result.
  272.  * Return size of compressed name or -1 if there was an error.
  273.  */
  274. extern int dn_expand (const u_char * /*msg*/, const u_char * /*eomorig*/,
  275.     const u_char * /*comp_dn*/, char * /*exp_dn*/, int /*length*/);
  276.  
  277.  
  278.  
  279. extern int        res_hnok(const char *);
  280. extern int        res_ownok(const char *);
  281. extern int        res_mailok(const char *);
  282. extern int        res_dnok(const char *);
  283. extern int        sym_ston(const struct res_sym *, char *, int *);
  284. extern const char *    sym_ntos(const struct res_sym *, int, int *);
  285. extern const char *    sym_ntop(const struct res_sym *, int, int *);
  286. extern int        b64_ntop(u_char const *, size_t, char *, size_t);
  287. extern int        b64_pton(char const *, u_char *, size_t);
  288. extern int        loc_aton(const char *, u_char *);
  289. extern const char *    loc_ntoa(const u_char *, char *);
  290. extern int        dn_skipname(const u_char *, const u_char *);
  291. extern void        fp_resstat(struct __res_state *, FILE *);
  292. extern void        fp_query(const u_char *, FILE *);
  293. extern void        fp_nquery(const u_char *, int, FILE *);
  294. extern const char *    hostalias(const char *);
  295. extern void        putlong(u_int32_t, u_char *);
  296. extern void        putshort(u_int16_t, u_char *);
  297. extern const char *    p_class(int);
  298. extern const char *    p_time(u_int32_t);
  299. extern const char *    p_type(int);
  300. extern void        p_query(const u_char *);
  301. extern const u_char *    p_cdnname(const u_char *, const u_char *, int, FILE *);
  302. extern const u_char *    p_cdname(const u_char *, const u_char *, FILE *);
  303. extern const u_char *    p_fqnname(const u_char *cp, const u_char *msg,
  304.                     int, char *, int);
  305. extern const u_char *    p_fqname(const u_char *, const u_char *, FILE *);
  306. extern const u_char *    p_rr(const u_char *, const u_char *, FILE *);
  307. extern const char *    p_option(u_long option);
  308. extern char *        p_secstodate(u_long);
  309. extern int        dn_count_labels(char *);
  310. extern int        dn_comp(const char *, u_char *, int,
  311.                   u_char **, u_char **);
  312. extern int        dn_expand(const u_char *, const u_char *, const u_char *,
  313.                     char *, int);
  314. extern int        _resolver_init(void);
  315. extern u_int        res_randomid(void);
  316. extern int        res_query(const char *, int, int, u_char *, int);
  317. extern int        res_search(const char *, int, int, u_char *, int);
  318. extern int        res_querydomain(const char *, const char *, int, int,
  319.                       u_char *, int);
  320. extern int        res_mkquery(int, const char *, int, int, const u_char *, int,
  321.                   const u_char *, u_char *, int);
  322. extern int        res_send(const u_char *, int, u_char *, int);
  323. extern int        res_isourserver(const struct sockaddr_in *);
  324. extern int        res_nameinquery(const char *, int, int,
  325.                       const u_char *, const u_char *);
  326. extern int        res_queriesmatch(const u_char *, const u_char *,
  327.                        const u_char *, const u_char *);
  328. extern void        res_close(void);
  329.  
  330. #ifdef __cplusplus
  331. /* end of C++ protection for the prototypes */
  332. }
  333. #endif
  334.  
  335. /* end of resolv.h */
  336. #endif
  337.